`:top
`!Euclid`! is an imperative programming language for writing `F33f`_`[verifiable`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Formal_verification]`_`f programs. It was designed in the mid-1970s by `F33f`_`[Butler Lampson`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Butler_Lampson]`_`f and `F33f`_`[James G. Mitchell`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=James_G._Mitchell]`_`f at the `F33f`_`[Xerox PARC`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Xerox_PARC]`_`f lab in collaboration with `F33f`_`[Jim Horning`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Jim_Horning]`_`f at the `F33f`_`[University of Toronto`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=University_of_Toronto]`_`f, Ralph L. London at `F33f`_`[USC ISI`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Information_Sciences_Institute]`_`f and `F33f`_`[Gerald J. Popek`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Gerald_J._Popek]`_`f at `F33f`_`[UCLA`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=University_of_California,_Los_Angeles]`_`f. The implementation was led by `F33f`_`[Ric Holt`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Ric_Holt]`_`f at the `F33f`_`[University of Toronto`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=University_of_Toronto]`_`f and `F33f`_`[James Cordy`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=James_Cordy]`_`f was the principal programmer for the first implementation of the `F33f`_`[compiler`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Compiler]`_`f. It was originally designed for the `F33f`_`[Motorola 6809`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Motorola_6809]`_`f microprocessor. It was considered innovative for the time; the compiler development team had a $2 million budget over 2 years and was commissioned by the `F33f`_`[Defense Advanced Research Projects Agency`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Defense_Advanced_Research_Projects_Agency]`_`f of the `F33f`_`[U.S. Department of Defense`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=United_States_Department_of_Defense]`_`f and the `F33f`_`[Canadian Department of National Defence`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Department_of_National_Defence_(Canada)]`_`f. It was used for a few years at `F33f`_`[I. P. Sharp Associates`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=I._P._Sharp_Associates]`_`f, `F33f`_`[MITRE Corporation`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=MITRE]`_`f, `F33f`_`[SRI International`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=SRI_International]`_`f and various other international institutes for research in systems programming and secure software systems.
Euclid is descended from `F33f`_`[Pascal`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Pascal_programming_language]`_`f, `F33f`_`[Mesa`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Mesa_(programming_language)]`_`f, `F33f`_`[Alphard`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Alphard_(programming_language)]`_`f, `F33f`_`[CLU`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=CLU_(programming_language)]`_`f, Gypsy, `F33f`_`[BCPL`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=BCPL]`_`f, `F33f`_`[Modula`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Modula]`_`f, `F33f`_`[LIS`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=LIS_(programming_language)]`_`f, and SUE. Functions in Euclid are closed scopes, may not have side effects, and must explicitly declare imports. Euclid also disallows `F33f`_`[gotos`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=GOTO]`_`f, floating point numbers, global assignments, `F33f`_`[nested functions`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Nested_function]`_`f and aliases, and none of the actual parameters to a function can refer to the same memory cell (which Euclid calls a "variable"). Euclid implements modules as types. Descendants of Euclid include the `F33f`_`[Concurrent Euclid programming language`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Concurrent_Euclid_programming_language]`_`f and the `F33f`_`[Turing programming language`:/page/wikibook/entry.mu`zim=wikipedia_en_all_nopic_2025-08.zim|entry_path=Turing_programming_language]`_`f.
>>External links
• B.W. Lampson, J.J. Horning, R.L. London, J.G. Mitchell and G.J. Popek 1977. Report on the programming language Euclid. SIGPLAN Notices 12, 2 (February 1977), 1-79.
• R.C. Holt, D.B. Wortman, J.R. Cordy and D.R. Crowe 1978. The Euclid Language: a progress report. In Proceedings of the 1978 Annual Conference (Washington, D.C., United States, December 04 - 06, 1978), 111-115.
• D.B. Wortman and J.R. Cordy 1981. Early experiences with Euclid. In Proc. 5th international Conference on Software Engineering (San Diego, California, United States, March 09 - 12, 1981), 27-32.
`c`F0af`_`[↑ Back to top`#top]`_`f`a